#ifndef __POWER_PROC_H
#define __POWER_PROC_H

#include <stdint.h>
#include "bsp.h"

#ifdef __cplusplus
 extern "C" {
#endif


// #define POWER_CPU_EN_WRITE(n)                       bsp_gpio_write(CPU_5V_POWER_EN_GPIO_Port, CPU_5V_POWER_EN_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define POWER_CPU_EN_READ()                         bsp_gpio_read(CPU_5V_POWER_EN_GPIO_Port, CPU_5V_POWER_EN_Pin)

// #ifndef WL_PROJECT_COOPER
// #define POWER_PERIPHERAL_5V0_EN_WRITE(n)            bsp_gpio_write(PERIPHERAL_5V0_EN_427_GPIO_Port, PERIPHERAL_5V0_EN_427_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define POWER_PERIPHERAL_5V0_EN_READ()              bsp_gpio_read(PERIPHERAL_5V0_EN_427_GPIO_Port, PERIPHERAL_5V0_EN_427_Pin);
// #endif

// #define POWER_BATTERY_ON_WRITE(n)                   bsp_gpio_write(BATTERY_EN_GPIO_Port, BATTERY_EN_Pin, (n==1?GPIO_PIN_RESET:GPIO_PIN_SET))
// #define POWER_BATTERY_ON_READ(n)                    (!bsp_gpio_read(BATTERY_EN_GPIO_Port, BATTERY_EN_Pin))

// #define MOVE_POWER_WRITE(enable)                    bsp_gpio_write(MOVE_POWER_EN_GPIO_Port, MOVE_POWER_EN_Pin, (enable==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define MOVE_POWER_READ()                           bsp_gpio_read(MOVE_POWER_EN_GPIO_Port, MOVE_POWER_EN_Pin)
// #define MOVE_MOTOR_5V_WRITE(enable)                 bsp_gpio_write(MOTOR_5V0_EN_GPIO_Port, MOTOR_5V0_EN_Pin, (enable==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define MOVE_MOTOR_5V_READ()                        bsp_gpio_read(MOTOR_5V0_EN_GPIO_Port, MOTOR_5V0_EN_Pin)

// #define DISPLAY_PWR_WRITE(enable)                   bsp_gpio_write(DIS_5V0_EN_GPIO_Port, DIS_5V0_EN_Pin, (enable==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define DISPLAY_PWR_READ()                          bsp_gpio_read(DIS_5V0_EN_GPIO_Port, DIS_5V0_EN_Pin)

// #define POWER_VCU_WRITE(n)                          bsp_gpio_write(BAT_MOTOR_EN_GPIO_Port, BAT_MOTOR_EN_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define POWER_VCU_READ()                            bsp_gpio_read(BAT_MOTOR_EN_GPIO_Port, BAT_MOTOR_EN_Pin)

// #define POWER_OCD_READ()                            (bsp_gpio_read(MOTOR_POWER_DISABLE_MCU_GPIO_Port, MOTOR_POWER_DISABLE_MCU_Pin))
// #define POWER_OCD_RELEASE_WRITE(n)                  bsp_gpio_write(MOTOR_POWER_RELEASE_GPIO_Port, MOTOR_POWER_RELEASE_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))

// #define MOTOR_OCD_READ()                            (!bsp_gpio_read(MOTOR_OVERCURRENT_IR_GPIO_Port, MOTOR_OVERCURRENT_IR_Pin))
// #define MOTOR_OCD_RELEASE_WRITE(n)                  bsp_gpio_write(MOTOR_OCD_RECOVER_GPIO_Port, MOTOR_OCD_RECOVER_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))

// #define POWER_GOOD_READ()                           (bsp_gpio_read(PWR_GOOD_12V_GPIO_Port, PWR_GOOD_12V_Pin))
// #define POWER_GOOD_RELEASE_WRITE(n)                 bsp_gpio_write(PWR_GOOD_12V_GPIO_Port, PWR_GOOD_12V_Pin, (n==1?GPIO_PIN_SET:GPIO_PIN_RESET))
// #define VCU_RESET_WRITE(enable)                     bsp_gpio_write(MAIN_MCU_TO_VICE_RESET_GPIO_Port, MAIN_MCU_TO_VICE_RESET_Pin, (enable==1?GPIO_PIN_RESET:GPIO_PIN_SET))       //vcu on board(vice mcu)

/* NOTE: just allow add, delete and insert is forbidden*/
typedef enum
{
    ECU_POWER_ON_MCU_EN,                    /* only can be power off */
    ECU_3V3_SUBG_EN,                        /* only can be power off */
    ECU_5V0_PERIPHERAL_EN,                  /* can enable by 427& real wheel */
    ECU_POWER_CPU_EN,                         /* ACU */
    ECU_VCU_PWR_EN,                       /* LRVCU 24V */
    ECU_24V_PLAYLOAD_EN,                    /* playload 24V */
    ECU_BAT_EDAGE_ALIGN_EN,

    // add below,not delete up or insert up
    ECU_MOTOR_DRIVER_PWR_EN,
    ECU_VCU_5V0_EN,
    ECU_DIS_5V0_EN,

}en_PowerSwitch;


int8_t power_ctrl(en_PowerSwitch power,uint8_t on);
uint8_t power_ctrl_status(en_PowerSwitch power);
void lowPowerProtect(void);
#ifdef __cplusplus
}
#endif

#endif

